package com.wkm.chainchain.blockchain.block;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.stream.Collectors;

public class UnitPool {

    // 一个区块里装下4个单元
    private static final int UNIT_NUM = 4;

    private static final HashSet<Unit> CACHE_POOL = new HashSet<>();

    // 获取当前CACHE_POOL中单元所构成的区块体，并同时清空CACHE_POOL
    public static ArrayList<Unit> getBodyUnitList() {
        // 将HashSet转换为ArrayList，并进行统一的排序
        ArrayList<Unit> units = (ArrayList<Unit>) CACHE_POOL.stream().sorted().collect(Collectors.toList());
        CACHE_POOL.clear();
        return units;
    }

    // 给当前CACHE_POOL添加构成区块体的单元
    // 返回值是用来表示当前是否应当把CACHE_POOL里的缓存用来生成一个区块
    public static boolean addUnit(Unit unit) {
        if (CACHE_POOL.size() < UNIT_NUM) {
            CACHE_POOL.add(unit);
        }
        return CACHE_POOL.size() == UNIT_NUM;
    }

}
